library(tidyverse)
library(readxl)
library(countrycode)
library(gganimate)
url1 <- "https://query.data.world/s/tw3oaknxjlqods27xzzbpa3do4rmfr"
p1f <- tempfile()
download.file(url1, p1f, mode = "wb")
happy_data <- read_excel(path = p1f)
colnames(happy_data) <- c("WP5_Country", "country.name", "Year", "Happiness", "GDP", "Soc_Support", "Life_Exp", "Choice_Freedom", "Generosity", "Corrupt_Percept", "Pos_Aff", "Neg_Aff", "Gov_Confident", "Democratic_Qual", "Delivery_Qual", "HappySD", "HappySD_Mean", "Bank_Index", "Bank_Index_Past", "Income", "Trust", "Trust81", "Trust89", "Trust94", "Trust99", "Trust05", "Trust10")

#Create a continent column
happy_data$continent <- NA

#Set the country and continent columns as characters
happy_data$country.name <- as.character(happy_data$country.name)
happy_data$continent <-as.character(happy_data$continent)

#Map country name onto continent
happy_data <- happy_data %>%
  mutate(continent = countrycode(sourcevar = country.name, origin = "country.name", destination = "continent")) %>%
  select(continent, everything())
## Warning in countrycode(sourcevar = country.name, origin = "country.name", : Some values were not matched unambiguously: Kosovo
str(happy_data)
## Classes 'tbl_df', 'tbl' and 'data.frame':    1420 obs. of  28 variables:
##  $ continent      : chr  "Asia" "Asia" "Asia" "Asia" ...
##  $ WP5_Country    : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ country.name   : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ Year           : num  2008 2009 2010 2011 2012 ...
##  $ Happiness      : num  3.72 4.4 4.76 3.83 3.78 ...
##  $ GDP            : num  7.2 7.36 7.42 7.45 7.55 ...
##  $ Soc_Support    : num  0.451 0.552 0.539 0.521 0.521 ...
##  $ Life_Exp       : num  47.6 47.9 48.2 48.5 48.7 ...
##  $ Choice_Freedom : num  0.718 0.679 0.6 0.496 0.531 ...
##  $ Generosity     : num  0.183 0.205 0.139 0.176 0.248 ...
##  $ Corrupt_Percept: num  0.882 0.85 0.707 0.731 0.776 ...
##  $ Pos_Aff        : num  0.518 0.584 0.618 0.611 0.71 ...
##  $ Neg_Aff        : num  0.258 0.237 0.275 0.267 0.268 ...
##  $ Gov_Confident  : num  0.612 0.612 0.299 0.307 0.435 ...
##  $ Democratic_Qual: num  -1.96 -2.08 -2.02 -1.94 -1.86 ...
##  $ Delivery_Qual  : num  -1.67 -1.65 -1.63 -1.62 -1.44 ...
##  $ HappySD        : num  1.77 1.72 1.88 1.79 1.8 ...
##  $ HappySD_Mean   : num  0.477 0.391 0.395 0.466 0.475 ...
##  $ Bank_Index     : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ Bank_Index_Past: num  NA NA NA NA NA NA NA NA NA 0.305 ...
##  $ Income         : num  NA 0.442 0.327 0.337 0.345 ...
##  $ Trust          : num  NA 0.286 0.276 NA NA ...
##  $ Trust81        : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ Trust89        : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ Trust94        : num  NA NA NA NA NA ...
##  $ Trust99        : num  NA NA NA NA NA ...
##  $ Trust05        : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ Trust10        : num  NA NA NA NA NA NA NA NA NA NA ...
happy_data_cont <- happy_data %>% 
  filter(!is.na(continent))

#Plot happiness against year, split by continent, colour by country (Scatter)
ggplot(happy_data_cont, aes (x = Year, y = Happiness, colour = continent)) + 
  geom_point(alpha = .5, show.legend = TRUE) + 
  facet_wrap(~continent)

#Plot happiness against year, split by continent, colour by country (Line)
ggplot(happy_data_cont, aes (x = Year, y = Happiness, colour = country.name)) + 
  geom_line() + 
  facet_wrap(~continent) + 
  theme(legend.position="none")

ggplot(happy_data_cont, aes (x = country.name, y = Happiness, fill = continent)) + 
  geom_bar(stat = "identity", width = 2.0) +
  facet_wrap(~continent) +
  theme(legend.position="none") +
  geom_text(aes(label = country.name), angle = 90) +
  transition_time(Year)
## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals

## Warning: position_stack requires non-overlapping x intervals